home *** CD-ROM | disk | FTP | other *** search
- unit MemoClip;
-
- { The following object give you access to the
- clipboard format CF_TEXT as a TStringList with
- the Lines property, instead of the Text
- property wich only work for small strings.
-
- To access it you must do a typecast via
- with TMemoClipboard(ClipBoard) or
- with ClipBoard as TMemoClipboard !
-
- -Mfg Stefc-
- }
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, ClipBrd;
-
- type
- TMemoClipboard = class(TClipBoard)
- private
- function GetLines: TStrings;
- procedure SetLines(Value: TStrings);
- public
- property AsLines: TStrings read GetLines write SetLines;
- end;
-
- implementation
-
- { TMemoClipBoard }
-
- procedure TMemoClipBoard.SetLines(Value:TStrings);
- var
- Data : THandle;
- DataPtr : Pointer;
- Stream : TMemoryStream;
- begin
- Open;
- try
- Stream := TMemoryStream.Create;
- try
- Value.SaveToStream(Stream);
- Data := GlobalAlloc(GMEM_MOVEABLE, Stream.Size);
- try
- DataPtr := GlobalLock(Data);
- try
- hmemcpy(DataPtr, Stream.Memory, Stream.Size);
- Clear;
- SetClipboardData(CF_TEXT, Data);
- finally
- GlobalUnlock(Data);
- end;
- except
- GlobalFree(Data);
- raise;
- end;
- finally
- Stream.Free;
- end;
- finally
- Close;
- end;
- end;
-
- function TMemoClipBoard.GetLines: TStrings;
- var
- Data : THandle;
- DataPtr : PChar;
- Stream : TStream;
- begin
- Result:=nil;
- Open;
- try
- Data := GetClipboardData(CF_TEXT);
- if Data = 0 then Exit;
- DataPtr := GlobalLock(Data);
- try
- Stream := TMemoryStream.Create;
- try
- Stream.Write(DataPtr^,StrLen(DataPtr));
- Stream.Position := 0;
- try
- Result:=TStringList.Create;
- Result.LoadFromStream(Stream);
- except
- Result.Free;
- Result:=nil;
- end;
- finally
- Stream.Free;
- end;
- finally
- GlobalUnlock(Data);
- end;
- finally
- Close;
- end;
- end;
-
- begin
- Clipboard.Free; { Replace Clipboard with ourself }
- Clipboard:=TMemoClipboard.Create;
- end.
-